// Axios请求示例集合

// 1. GET请求（带URL参数）
// 功能：发送一个GET请求，附带URL参数param1和param2
// 参数：param1 - 第一个参数，param2 - 第二个参数
// 返回值：服务器返回的数据
// 使用示例：getWithParams('value1', 'value2').then(data => console.log(data));
export const getWithParams = async (param1, param2) => {
  try {
    const response = await apiClient.get('/api/example/get', {
      params: {
        param1: param1,
        param2: param2
      }
    });
    return response.data;
  } catch (error) {
    console.error('GET请求失败:', error);
    throw error;
  }
};

// 2. POST请求（RequestParam形式）
// 功能：发送一个POST请求，参数以RequestParam形式附带在URL中
// 参数：param1 - 第一个参数，param2 - 第二个参数
// 返回值：服务器返回的数据
// 使用示例：postWithRequestParam('value1', 'value2').then(data => console.log(data));
export const postWithRequestParam = async (param1, param2) => {
  try {
    const response = await apiClient.post('/api/example/postParam', null, {
      params: {
        param1: param1,
        param2: param2
      }
    });
    return response.data;
  } catch (error) {
    console.error('POST请求失败:', error);
    throw error;
  }
};

// 3. POST请求（RequestBody形式）
// 功能：发送一个POST请求，参数以RequestBody形式发送
// 参数：data - 请求体数据对象
// 返回值：服务器返回的数据
// 使用示例：postWithRequestBody({ key1: 'value1', key2: 'value2' }).then(data => console.log(data));
export const postWithRequestBody = async (data) => {
  try {
    const response = await apiClient.post('/api/example/postBody', data, {
      headers: {
        'Content-Type': 'application/json'
      }
    });
    return response.data;
  } catch (error) {
    console.error('POST请求失败:', error);
    throw error;
  }
};

// 4. 带认证的请求示例
// 功能：发送一个GET请求，带有Bearer Token认证头
// 参数：无
// 返回值：服务器返回的数据
// 使用示例：getWithAuth().then(data => console.log(data));
export const getWithAuth = async () => {
  try {
    const response = await apiClient.get('/api/secure/data', {
      headers: {
        Authorization: `Bearer ${localStorage.getItem('token')}`
      }
    });
    return response.data;
  } catch (error) {
    console.error('认证请求失败:', error);
    throw error;
  }
};

// 5. 文件上传示例
// 功能：发送一个POST请求，上传文件
// 参数：file - 要上传的文件对象
// 返回值：服务器返回的数据
// 使用示例：uploadFile(file).then(data => console.log(data));
export const uploadFile = async (file) => {
  try {
    const formData = new FormData();
    formData.append('file', file);

    const response = await apiClient.post('/api/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
    return response.data;
  } catch (error) {
    console.error('文件上传失败:', error);
    throw error;
  }
};

// 6. 带错误处理的请求示例
// 功能：发送一个GET请求，并处理可能的错误情况
// 参数：无
// 返回值：服务器返回的数据
// 使用示例：getWithErrorHandling().then(data => console.log(data)).catch(error => console.error(error));
export const getWithErrorHandling = async () => {
  try {
    const response = await apiClient.get('/api/example/error');
    return response.data;
  } catch (error) {
    if (error.response) {
      // 服务器返回了错误状态码
      console.error('服务器错误:', error.response.data);
      console.error('状态码:', error.response.status);
    } else if (error.request) {
      // 请求已发出但没有收到响应
      console.error('无响应:', error.request);
    } else {
      // 其他错误
      console.error('请求错误:', error.message);
    }
    throw error;
  }
};
